import tensorflow as tf

w0 = tf.placeholder(tf.float32)
x0 = tf.placeholder(tf.float32)
w1 = tf.placeholder(tf.float32)
x1 = tf.placeholder(tf.float32)
w2 = tf.placeholder(tf.float32)

mul0 = w0 * x0
mul1 = w1 * x1

add0 = mul0 + mul1
add1 = add0 + w2

invert = add1 * -1

exp = tf.exp(invert)

add2 = exp + 1

div = 1 / add2

grad_w0 = tf.gradients(div, w0)
grad_x0 = tf.gradients(div, x0)
grad_w1 = tf.gradients(div, w1)
grad_x1 = tf.gradients(div, x1)
grad_w2 = tf.gradients(div, w2)
grad_mul0 = tf.gradients(div, mul0)
grad_mul1 = tf.gradients(div, mul1)
grad_add0 = tf.gradients(div, add0)
grad_add1 = tf.gradients(div, add1)
grad_invert = tf.gradients(div, invert)
grad_exp = tf.gradients(div, exp)
grad_add2 = tf.gradients(div, add2)
grad_div = tf.gradients(div, div)

with tf.Session() as sess:
    gr_w0, gr_x0, gr_w1, gr_x1, gr_w2, gr_mul0, gr_mul1, gr_add0, gr_add1, gr_invert, gr_exp, gr_add2, gr_div = sess.run(
        [grad_w0,
         grad_x0,
         grad_w1,
         grad_x1,
         grad_w2,
         grad_mul0,
         grad_mul1,
         grad_add0,
         grad_add1,
         grad_invert,
         grad_exp,
         grad_add2,
         grad_div],
        feed_dict={
            w0: 2.0,
            x0: -1.0,
            w1: -3.0,
            x1: -2.0,
            w2: -3.0
        })
    print(int(gr_w0[0]), gr_x0, gr_w1, gr_x1, gr_w2, gr_mul0, gr_mul1, gr_add0, gr_add1, gr_invert, gr_exp, gr_add2,
          gr_div)
